// 验证的构造函数
/**
 * 传入文本框的id 和 验证规则（一个函数）
 */

class FieldValidator{
    constructor(txtId,validatorFunc){
        this.input = $('#' + txtId);
        this.p = this.input.nextElementSibling;
        this.validatorFunc = validatorFunc;
        // 当文本框失去焦点时进行验证
        this.input.onblur = ()=>{
            this.validate();
        }
    }


        // 进行验证  成功返回true 失败返回false 这里调用验证规则函数
        async validate(){
           const err = await this.validatorFunc(this.input.value);
           if(err){
            this.p.innerText = err;
            return false;
           }else{
            this.p.innerText = '';

            return true;
           }
        }

        /**
         * 静态方法 可以用类名调用 
         * 对传入的验证器 全部调用 全部通过返回true 否则返回false
         * 
         */

        static async validate(...validators){
            // 每一个验证器都执行一遍  返回一个promise数组
            const proms = validators.map(v=> v.validate());
            // 得到这个数组的返回值，即每次执行的返回结果
            const results = await Promise.all(proms);
            return results.every(r => r);
        }
}

